package com.mlh.linkedlist;

/**
 * @author 缪林辉
 * @date 2024/8/20 17:08
 * @DESCRIPTION
 */
//将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
public class 合并两个有序链表 {
    public ListNode method1(ListNode list1, ListNode list2) {
        if(list1==null||list2==null){
            return list1==null?list2:list1;
        }
        //head是哨兵节点，便于程序的书写。
        ListNode head=new ListNode(-1),pre=head;
        //开始迭代
        while (list1!=null&&list2!=null){
            if(list1.val<list2.val){
                pre.next=list1;
                list1=list1.next;
            }else{
              pre.next=list2;
              list2=list2.next;
            }
            pre=pre.next;
        }
        //看谁为null将另外一个链表接上去
        if(list1==null){
            pre.next=list2;
        }else{
            pre.next=list1;
        }
        return head.next;
    }

    public ListNode practice(ListNode list1, ListNode list2) {
        ListNode newHead=new ListNode();
        ListNode temp=newHead;
        while (list1!=null&&list2!=null){
            if(list1.val>list2.val){
                newHead.next=list2;
                list2=list2.next;
            }else{
                newHead.next=list1;
                list1=list1.next;
            }
            newHead=newHead.next;
        }
        if(list1==null){
            newHead.next=list2;
        }else {
            newHead.next=list1;
        }
        return temp.next;
    }
}
